Transformada Discreta de Fourier em duas dimensões:
$$ 0 \leq y < M , 0 \leq v < M $$
In [18]:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
from numpy.fft import *
import sys,os
ia898path = os.path.abspath('../../')
if ia898path not in sys.path:
sys.path.append(ia898path)
import ia898.src as ia
Para exemplificar o caso unidimensional, vamos pegar uma imagem bidimensional (cameraman) e escolher apenas uma linha da imagem para ser nossa função unidimensional.
In [20]:
f1 = mpimg.imread('../data/cameraman.tif')[10,:]
plt.plot(f1)
F1 = fft(f1)
g1 = ifft(F1)
print ('comparando g1 e f1:', abs(g1-f1).max())
In [36]:
f2 = mpimg.imread('../data/cameraman.tif')
F2 = fft2(f2)
g2 = ifft2(F2)
print ('comparando g2 e f2:', abs(g2-f2).max())
plt.figure(1, figsize=(8,8))
plt.subplot(1,2,1)
plt.imshow(f2, cmap='gray')
plt.subplot(1,2,2)
plt.imshow(ia.dftview(F2), cmap='gray')
Out[36]:
A transformada discreta de Fourier e sua inversa são periódicas com períodos N e M, isto é: $$ F(u,v) = F(u+N,v) = F(u, v+M) = F(u + N, v+M)$$
Se $f(x)$ é real, isto é, a parte imaginária é zero, então $F(u)$ exibe simetria do complexo conjugado, ou seja: $$ F(u,v) = F^{*}(-u,-v) $$
A rotação de $f(x,y)$ de um ângulo $\theta$ implicará em uma rotação de $F(u,v)$ deste mesmo ângulo $\theta$.
O valor médio de $f(x,y)$ é relacionado à $F(u,v)$ por: $$ \bar{f}(x,y) = \frac{1}{NM}F(0,0)$$
In [ ]: